home *** CD-ROM | disk | FTP | other *** search
Java Source | 2001-06-23 | 4.5 KB | 177 lines |
- /*
- ADDDice by Scott Ziegler 06.14.99
-
- Instructions for use:
-
- This class implements the set of polyhedral dice used in the AD&D setting
-
- Supported Functions:
-
- ADDDice() - default constructor, inits to a six-sided die
- ADDDice(int, int, int) - constructor which accepts the coefficient, the die,
- and the modifier
- Selector/Mutators - full set of get/set functions for data fields, of the form
- [get|set]{capitalized data field name} e.g. getModifier
- List: Coefficient, Die, Modifier
- roll() - returns the value of the constructed die when "rolled"
- roll(int) - returns the value of the constructed die with new coefficient
- roll(int, int) - returns the value of the constructed die with new coefficient
- and new modifier
- toString() - turns ADDDice object into a string representation of that die
- stringToDie(String) - turns a well-formed string into a die object; form is:
- X 'd' Y ['+'|'-'] Z e.g. 10d12+36 or 100d6-10
- and Y must be inDieSet.
-
-
- Code in use by:
-
-
- Vers. History:
- 09.29.00 - re-evaluated the file, adding new comment style
- 10.09.00 - re-implemented the roll() function and made Random obj a member
-
- Work Needed:
- - maybe an set of exceptions for bad formed dieStrings and integers
-
- Work Completed:
-
-
- */
- package Arcana;
-
- // import com.sun.java.swing.*;
- import javax.swing.*;
- import java.io.*;
- import java.util.Random;
-
- public class ADDDice implements Serializable {
-
- final static int[] dieSet = {2,3,4,6,8,10,12,20,30,100};
-
- private int coefficient;
- private int die;
- private int modifier;
- private transient Random rand;
-
- public ADDDice() {
- coefficient = 1;
- die = 6;
- modifier = 0;
- rand = new Random();
- }
-
- public ADDDice(int coef, int dye, int modf) {
-
- if (inDieSet(dye)) die = dye;
- else { // exception?
- System.out.println("That die doesn't exist! \n");
- }
- coefficient = coef;
- modifier = modf;
- rand = new Random();
- }
-
- public int roll() {
- int rolledValueSum = 0;
- int valueHolder = 0;
- for(int i=0;i < coefficient;i++) {
- valueHolder = Math.round(rand.nextFloat() * die);
- rolledValueSum += (valueHolder>0?valueHolder:1);
- }
- return (rolledValueSum + modifier);
- }
-
- /*public int roll() {
- int rolledValue = ((coefficient * ((int)(rand.nextDouble() * die) + 1)) + modifier);
- return rolledValue;
- }*/
-
- public int roll(int coef) {
- int rolledValueSum = 0;
- int valueHolder = 0;
- for(int i=0;i < coef;i++) {
- valueHolder = Math.round(rand.nextFloat() * die);
- rolledValueSum += (valueHolder>0?valueHolder:1);
- }
- return (rolledValueSum + modifier);
- }
-
- public int roll(int coef, int modf) {
- int rolledValueSum = 0;
- int valueHolder = 0;
- for(int i=0;i < coef;i++) {
- valueHolder = Math.round(rand.nextFloat() * die);
- rolledValueSum += (valueHolder>0?valueHolder:1);
- }
- return (rolledValueSum + modf);
- }
-
- public int getCoefficient() { return coefficient; }
-
- public int getDie() { return die; }
-
- public int getModifier() { return modifier; }
-
- public void setCoefficient(int c) { coefficient = c; }
-
- public void setDie(int d) {
- if (inDieSet(d)) { die = d; }
- else { /* addDieDialog(d); */
- System.out.println("That die doesn't exist! \n");
- } // need to implement
- }
-
- public void setModifier(int modf) { modifier = modf; }
-
- private boolean inDieSet(int dye) {
- boolean inSet = false;
- for (int i=0; i < 10; i++) {
- if (dieSet[i] == dye) inSet = true;
- }
- return inSet;
- }
-
- public String toString() {
- return new String ("" + coefficient +
- "d" + die +
- (modifier != 0?(modifier >= 0?"+":"-"):"") + (modifier != 0?(""+modifier):""));
- }
-
- public ADDDice stringToDie(String dieStr) {
- int indOfD = 0;
- int indOfSign = 0;
- int modfInt;
- boolean negModf = false;
- boolean noModf = false;
- String coefStr;
- String sideStr;
- String modfStr;
-
- indOfD = dieStr.indexOf('d');
- if ((dieStr.indexOf('-') == -1) && (dieStr.indexOf('+') == -1)) noModf = true;
- indOfSign = dieStr.indexOf('+');
- if (indOfSign == -1) {
- indOfSign = dieStr.indexOf('-');
- negModf = true;
- }
- coefStr = dieStr.substring(0,indOfD); //that is 'd' exclusive
- if (!noModf) {
- sideStr = dieStr.substring(indOfD+1, indOfSign);
- modfStr = dieStr.substring(indOfSign+1);
- modfInt = Integer.parseInt(modfStr);
- if (negModf) modfInt *= -1;
- }
- else {
- sideStr = dieStr.substring(indOfD+1);
- modfInt = 0;
- }
-
- return new ADDDice(Integer.parseInt(coefStr), Integer.parseInt(sideStr), modfInt);
- }
-
-
- }
-
-
-
-